package com.zwh.se.constant_variable_operator;

/**
 * 逻辑运算符: &、|、&&、||、!。一般使用于通过表达式来判断某种关系。
 *
 * @author yexi
 */
public class LogicalOperators {
    public static void main(String[] args) {
        // & 逻辑与，代表与(也叫且,并且)。规律：只要有一个操作数是false，那么结果一定是false。
        System.out.println(true & true);
        System.out.println(false & true);
        System.out.println(true & false);
        System.out.println(false & false);
        System.out.println(true & true & true & true);
        // | 逻辑或：代表或(也叫或者)。规律：只要有一个操作数是true，那么结果一定是true
        System.out.println(true | true);
        System.out.println(false | true);
        System.out.println(true | false);
        System.out.println(false | false);
        // ! 代表非(也代表着取反)。规律：相反结果
        System.out.println(!true);
        System.out.println(!false);

        // ^ 代表异或，同时也是位运算符的一种，可应用于判断。但是对于java程序员而言，使用该运算符的场景是极少的。
        // 运算规则：参加运算的两个数,按二进制位进行"异或"运算,也就是如果两个相应位为"异"，则该位结果为1，否则为0。
        // 规律：相同则false，不同则true
        // 而true和false底层就是一位的0和1，所以也可以用作逻辑判断
        System.out.println(true ^ true);
        System.out.println(true ^ false);
        System.out.println(false ^ true);
        System.out.println(false ^ false);

        // && 代表短路与。
        // 运算规则：两边表达式从左向右开始对比，如果左边的表达式是false，则认为右边不需要进行判断，直接停止，所以叫短路
        System.out.println(true && true);
        System.out.println(true && false);
        System.out.println(false && true);
        System.out.println(false && false);
        //验证与&的区别:
        int i = 10;
        int j = 20;
        boolean r = (i > j) && (++i < j);
        System.out.println(r);
        System.out.println(i);

        // || 代表短路或。
        // 运算规则：与短路与同理。两边表达式从左向右开始对比，如果左边的表达式是true，则认为右边不需要进行判断，直接停止。
        System.out.println(true || true);
        System.out.println(true || false);
        System.out.println(false || true);
        System.out.println(false || false);
        //验证与|的区别:
        int f = 10;
        int g = 20;
        boolean q = (i < j) && (++i < j);
        System.out.println(f);
        System.out.println(g);

    }
}
